iT邦幫忙

2024 iThome 鐵人賽

DAY 14
1
生成式 AI

Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用系列 第 14

【Day14】Dify 安裝:使用 Docker 安裝、設定模型並啟動你的第一個 LLM 聊天助手

  • 分享至 

  • xImage
  •  

安裝與設定

你可以把 Dify 裝在自己的電腦,也可以用線上版的,直接到官網註冊帳號使用

Docker

啟動

使用 Docker compose 啟動,不知道 Docker 是什麼可以看這篇文章,docker compose 就是就是用來定義和執行多個 docker 容器的工具。

硬體規格要求如下

  • CPU >= 2 Core
  • RAM >= 4GB
  1. 先到 Docker 的官網裝好 docker,將 Dify 複製到你的裝置中
  2. 將 dify 複製到你的任何目錄底下
    git clone https://github.com/langgenius/dify.git
    
  3. 進到 dify/docker 中,這邊放了所有和 docker 有關的設定
    cd dify/docker
    
  4. 創建環境檔案 (.env) 這邊直接複製他的範例即可
    cp .env.example .env
    
    這邊 Dify 有 nginx 的 container,會將服務開在我們電腦的 80 port 和 443 port (如果有啟動 https),如果你不想開在這些 port 或者電腦這些 port 已經被使用了可以自行修改 .env
    # HTTP port
    NGINX_PORT=80 # 這邊改成你想要的 port
    
    # ------------------------------
    # Docker Compose Service Expose Host Port Configurations
    # ------------------------------
    EXPOSE_NGINX_PORT=80 # 這邊也要改 
    
  5. 啟動 docker compose
    docker compose up -d # 這邊的 -d 是背景執行的意思
    

docker 會先去拉下 dify 的 image,然後再一一啟動這些容器,Dify 真的是很大很完整的一個專案,這個過程可能需要五分鐘左右

你可以用 docker ps 來檢查目前電腦中正在運行的容器,應該會看到 dify 相關的容器

NAME                  IMAGE                              COMMAND                   SERVICE      CREATED              STATUS                        PORTS
docker-api-1          langgenius/dify-api:0.6.13         "/bin/bash /entrypoi…"   api          About a minute ago   Up About a minute             5001/tcp
docker-db-1           postgres:15-alpine                 "docker-entrypoint.s…"   db           About a minute ago   Up About a minute (healthy)   5432/tcp
docker-nginx-1        nginx:latest                       "sh -c 'cp /docker-e…"   nginx        About a minute ago   Up About a minute             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
docker-redis-1        redis:6-alpine                     "docker-entrypoint.s…"   redis        About a minute ago   Up About a minute (healthy)   6379/tcp
docker-sandbox-1      langgenius/dify-sandbox:0.2.1      "/main"                   sandbox      About a minute ago   Up About a minute             
docker-ssrf_proxy-1   ubuntu/squid:latest                "sh -c 'cp /docker-e…"   ssrf_proxy   About a minute ago   Up About a minute             3128/tcp
docker-weaviate-1     semitechnologies/weaviate:1.19.0   "/bin/weaviate --hos…"   weaviate     About a minute ago   Up About a minute             
docker-web-1          langgenius/dify-web:0.6.13         "/bin/sh ./entrypoin…"   web          About a minute ago   Up About a minute             3000/tcp
docker-worker-1       langgenius/dify-api:0.6.13         "/bin/bash /entrypoi…"   worker       About a minute ago   Up About a minute             5001/tcp

打開瀏覽器輸入 http://localhost/ 應該就會看到 Dify 的設定畫面了

其他設定像是更新、設定環境變數等等請自行參考文件

自行建立

也可以自己搭建前端後端和中介程式 (Middleware),Dify 在這方面做得很完善,適合進階使用者,尤其是想要自行修改 Dify 介面給自己用的開心的人,請參考文件

在 Zeabur 上使用

官網連結
Zeabur 是一個專為開發者設計的雲端服務部署平台,簡化應用程式的部署過程。該平台支持多種程式語言和開發框架,並且只需幾個簡單的步驟即可完成部署,讓開發者能夠將更多精力集中於產品開發上。

更酷的是,其創辦人 Yuan Lin 是台灣人喔!前陣子我在 threads 上看到分享了一個 zeabur 的 vscode / cursor 的擴充套件,遇到了一些問題而無法一鍵部署,在下方留言求助他就馬上密我 IG,經過一番折騰與我測試後終於好了XD

目前開發者方案一個月是 5 美元,用量的計算則會免費送你 5 美元,蠻佛心的如果只是小專案的話。

點擊連結,直接按部署就可以用了,非常簡單,不過有時候會遇到 OpenAI API 國家不支援的問題,應該只要換機房就可以了。

不過如果你是用 Zeabur 部署,就不建議使用 Ollama 了,畢竟沒有 GPU。可以用雲端運算像是 AWS, GDP 或 Azure 等等,但只用 LLM API 是沒問題的。

設定模型供應商

到右上角設定 -> 模型供應商 這邊會看到 Dify 有支援的所有 LLM API (超級多...),包含前幾天我們
用到的 OpenAI, Groq, Anthropic 和本地的 Ollama 等等,按下設定然後輸入 API Key 即可使用

設定好長這樣,你可以查看該供應商提供的模型,並且限制在這個平台上的使用者能不能使用

Ollama 設定

如果你的 Dify API 是自己 build 起來的,而且 Ollama 也是在官網下載的,那可以直接在 Base url 填入 http://192.168.1.100:11434
不過如果你是使用 Docker 安裝 Dify 那就需要將 Base url 改成 http://host.docker.internal:11434 ,因為如果你用的是 localhost,Dify 會把這個 localhost 當成自己 container 中的 localhost,要特別注意。

新增完畢

應用種類簡介

回到主頁面,你應該會看到左邊有「建立應用」的字樣,你可以直接從「應用模板」拿別人設計好的應用來使用,也可以匯入別人做好的 Dify 工作流 (你可以把 Dify 應用匯出成一個叫 DSL 的檔案,其實就是一個 yaml 檔)

點擊建立應用會看到有四種應用,分別式聊天助手、文字生成應用、Agent 和工作流

這四種應用大概是:

  • 聊天助手:對話型應用,採用一問一答的模式與使用者持續對話
  • 文字生成應用:專門用來寫故事、文本分類、翻譯等等,專注於文本生成助手
  • Agent:能分解任務、推理思考、使用工具的對話式助手,Agent 也可以用在聊天助手中
  • 工作流:基於流程編排的方式定義更加靈活的 LLM 工作流,不單只是聊天了

文本生成和聊天助手的差別可以參考下表

文本生成 聊天助理
WebApp 介面 表單 + 結果 基於聊天
WebAPI 介面 completion-messages chat-messages
互動模式 一題一答 多輪對話
串流結果 支援 支援
上下文保留 每次交談 (session) 持續
使用者輸入表單 支援 支援
數據集和插件 支援 支援
AI 開場白 不支援 支援
使用情境 翻譯、判斷、索引 聊天

用 Dify 建立一個簡單的聊天助手!

這邊我們就用一個空白的應用來建立自己的 ChatGPT 吧!透過 Ollama 使用本地的 Llama3 模型

先建立空白應用,這邊我們選擇「聊天助手」,然後用「基礎編排」

進入畫面後,到右上角設定模型這邊把把模型改成 Ollama 的 llama3,當然你也可以用其他模型,像是前幾天我們下載的 Taide

在左邊的提示詞可以叫他使用繁體中文回覆我們,也可以自行設定變數來當作 prompt 的一部分

變數

點擊左側變數欄位旁邊的新增按鈕

會看到有四種變數和一個基於 API 的變數 (新功能)

  • 文字:比較短的文字
  • 段落:比較長的文字
  • 下拉選項:可以選擇的文字
  • 數字:就是數字 ((?

這邊我想設定一個下拉選項叫他 language,按他旁邊的操作可以進到設定

這邊我就用簡體中文、繁體中文和英文來當作選項,你也可以設定這個為必填選項。

然後就可以把這個變數加到我們的 Prompt,Dify 表示變數的方法是使用 {{}} 兩個大括號,裡面是變數名稱,他也會提示你有哪些變數,UX 超級讚😻

如果你不知道怎麼寫 prompt 也可以用右上角的「產生」,讓你這邊選擇的模型幫你生成 prompt,一個很好的參考,按下 Apply 可以直接使用

測試與發佈

都設定完之後,可以先到右邊的聊天視窗去測試,這邊我選擇繁體中文,然後問他英文的問題,感覺效果不錯

然後你可以按下右上角的「發佈」,更新目前的修改,然後按下「運行」

就會跳出一個新的分頁:一個聊天視窗,馬上就可以測試了!如果你是部署在 Zeabur 上,馬上就可以把這個連結分享給你的親朋好友,然後跟他們說「我是 AI 工程師,這是我的作品,怎麼樣ㄚ😎」

小結

總算是把 Dify 安裝好了,也順利建構自己的 ChatGPT,是不是很簡單ㄚ,你也可以到「探索」那邊看看別人做好的應用,直接拿來用,有些真的很不錯像是新聞摘要、寫程式的工作流等等

如果你已經是個有前後端開發經驗的老手了,也可以試試把在 Dify 發布的 API 加入到自己現有的應用中,超有趣的。這個部分之後我在介紹 API 串接的時候再詳細說吧~

明天來介紹另一個厲害的東西:Agent,與聊天助手最大的差別就是,他可以使用工具,期待一下吧~


上一篇
【Day13】告別繁瑣程式碼:初探 Dify / Langflow 等圖形化介面工具來開發 LLM 應用!
下一篇
【Day15】Dify 入門 (1):讓 Agent 幫報新聞、查資料、唬爛...還有好多好多
系列文
Python 新手的 AI 之旅:從零開始打造屬於你的 AI / LLM 應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言